package gui.logado;

import conexao.Http;
import conexao.HttpData;
import conexao.HttpListener;
import gui.ajuda.Ajuda;
import gui.opcoes.Settings;
import gui.utilitarias.Comfirma;
import gui.utilitarias.ComfirmaListener;
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.lcdui.*;
import recados.Recados;

public class Logado extends List implements CommandListener, ComfirmaListener, HttpListener {

    private final Recados midlet;
    private final Command cmdSair;

    public Logado(Recados midlet) {
        super("Recados", IMPLICIT);

        this.midlet = midlet;

        try {
            append("Mensagens", Image.createImage("/gui/logado/mensagens.png"));
            append("Chat", Image.createImage("/gui/logado/chat.png"));
            append("Usuarios", Image.createImage("/gui/logado/usuario.png"));
            append("Minha Conta", Image.createImage("/gui/logado/avancado.png"));
            append("Opções", Image.createImage("/gui/logado/opcoes.png"));
            append("Ajuda", Image.createImage("/gui/logado/ajuda.png"));
            append("Logout", Image.createImage("/gui/logado/sair.png"));
        } catch (IOException ex) {
        }

        cmdSair = new Command("Sair", Command.EXIT, 0);
        addCommand(cmdSair);

        setCommandListener(this);
    }

    public void commandAction(Command c, Displayable d) {
        if (c == cmdSair) {
            Comfirma sair = new Comfirma(this, "Sair", "Fechar aplicativo?");
            sair.setId(1);
            sair.setListener(this);
            Recados.setCurrent(sair);
        } else if (c == List.SELECT_COMMAND) {
            switch (getSelectedIndex()) {
                case 0:
                    Recados.setCurrent(midlet.getMensagens());
                    break;
                case 1:
                    Recados.setCurrent(midlet.getChat());
                    midlet.getChat().enterChat();
                    break;
                case 2:
                    midlet.getUsuarios().setBack(this);
                    Recados.setCurrent(midlet.getUsuarios());
                    break;
                case 3:
                    Recados.setCurrent(midlet.getAvancado());
                    break;
                case 4:
                    Settings set = new Settings(midlet);
                    set.setBack(this);
                    Recados.setCurrent(set);
                    break;
                case 5:
                    Ajuda a = new Ajuda();
                    Recados.setCurrent(a);
                    break;
                case 6:
                    Comfirma sair = new Comfirma(this, "Logout", "Voçê tem certeza ?");
                    sair.setId(0);
                    sair.setListener(this);
                    Recados.setCurrent(sair);
                    break;
            }
        }
    }

    public void retornoComfirma(int id, int retorno) {
        if (id == 0) {
            if (retorno == Comfirma.SIM) {
                run();
            }
        } else if (id == 1) {
            if (retorno == Comfirma.SIM) {
                midlet.destroyApp(true);
            }
        }
    }

    public void run() {
        Http http = new Http("Desconectando...");
        http.setListener(this);

        HttpData dados = new HttpData();

        dados.setPagina("/logout.php");

        dados.put("nome", midlet.getLoginConfig().getNome());
        dados.put("senha", midlet.getLoginConfig().getSenha());

        http.setHttpData(dados);

        Recados.setCurrent(http);

        http.doPost(false);
    }

    public void requisicaoCancelada() {
        Recados.setCurrent(this);
    }

    public void falhaRequisiçao(String mensagem) {
        Recados.setCurrent(new Alert("Erro", mensagem, null, AlertType.ERROR), this);
    }

    public void requisicaoConcluida(DataInputStream in) {
        String primeiraLinha = Http.readLine(in);
        String segundaLinha = Http.readLine(in);
        if (primeiraLinha.equals("erro")) {
            Recados.setCurrent(new Alert("Erro", segundaLinha, null, AlertType.ERROR), this);
        } else if (primeiraLinha.equals("ok")) {
            midlet.delogged();
            Recados.setCurrent(midlet.getLogin());
        }
    }
}
